package main

import (
	"./study"
	"./runner"
	"time"
	"log"
	"os"
)
func main()  {
	//usera := study.User{"小明",20,"普通用户"}
	//uadd := &usera
	//uadd.PrintInfo()
	//fmt.Println(usera)
	// 分配一个逻辑处理器给调度器使用
	//runtime.GOMAXPROCS(1)
	//// wg用来等待程序完成
	//var wg  sync.WaitGroup
	////等待两个goroutine
	//wg.Add(2)
	//// 声明一个匿名函数，并创建一个 goroutine
	//fmt.Println("Start Goroutines")
	//go func() {
	//	// 在函数退出时调用 Done 来通知 main 函数工作已经完成
	//	defer wg.Done()
	//	// 显示字母表 3 次
	//	for count := 0; count < 3; count++ {
	//		for char := 'A'; char < 'A'+26; char++ {
	//			fmt.Printf("%c ", char)
	//		}
	//		fmt.Println("Goroutine1")
	//	}
	//}()
	//
	//// 声明一个匿名函数，并创建一个 goroutine
	// go func() {
	//	 // 在函数退出时调用 Done 来通知 main 函数工作已经完成
	//	 defer wg.Done()
	//	 // 显示字母表 3 次
	//	 for count := 0; count < 3; count++ {
	//		 for char := 'A'; char < 'A'+26; char++ {
	//		 fmt.Printf("%c ", char)
	//		 }
	//		 fmt.Println("Goroutine2")
	//	 }
	// }()
	// fmt.Println("Waiting To Finish")
	// wg.Wait()
	study.ChannelTest()

	// timeout 规定了必须在多少秒内处理完成
	 const timeout = 3 * time.Second

	 // main 是程序的入口
		log.Println("Starting work.")

		 // 为本次执行分配超时时间
		 r := runner.New(timeout)

		 // 加入要执行的所有任务
		 r.Add(createTask(), createTask(), createTask())

		 // 执行任务并处理结果
		 if err := r.Start(); err != nil {
			 switch err {
			 	// 是否是超时
				 case runner.ErrTimeout:
				 log.Println("Terminating due to timeout.")
				 os.Exit(1)
				 case runner.ErrInterrupt:
				 log.Println("Terminating due to interrupt.")
				 os.Exit(2)
		 }
			 }

		 log.Println("Process ended.")





}


 // createTask 返回一个根据 id
 // 休眠指定秒数的示例任务
 func createTask() func(int) {
	 return func(id int) {
		 log.Printf("Processor - Task #%d.", id)
		 time.Sleep(time.Duration(id) * time.Second)
		 }
	 }